package com.llsydn.beijingnews.view;

import android.content.Context;
import android.support.v4.view.ViewPager;
import android.util.AttributeSet;
import android.view.MotionEvent;

/**
 * @author lilinshen
 * @title 用于处理viewpager的不能往回滑动的问题
 * @description 请填写相关描述
 * @date 2018/10/26 15:37
 */
public class HorizontalScollViewPager extends ViewPager {
    public HorizontalScollViewPager(Context context) {
        super(context);
    }

    public HorizontalScollViewPager(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    private float startX;
    private float startY;

    /**
     * 处理新闻页面，第一个页签，viewpager滑动到右边，不能再向左滑动的问题
     *
     * @param ev
     * @return
     */
    @Override
    public boolean dispatchTouchEvent(MotionEvent ev) {
        // 请求父层视图不拦截，当前控件事件（不拦截当前viewpager的事件）
        // getParent().requestDisallowInterceptTouchEvent(true);
        switch (ev.getAction()) {
            case MotionEvent.ACTION_DOWN:
                // 记录起始坐标
                startX = ev.getX();
                startY = ev.getY();

                getParent().requestDisallowInterceptTouchEvent(true);
                break;
            case MotionEvent.ACTION_MOVE:
                // 来到新的坐标
                float endX = ev.getX();
                float endY = ev.getY();
                // 计算偏移量
                float distanceX = endX - startX;
                float distanceY = endY - startY;
                // 判断滑动方向
                if (Math.abs(distanceX) > Math.abs(distanceY)) {
                    // 水平方向滑动
                    if (getCurrentItem() == 0 && distanceX > 0) {
                        //第一个，从左到右滑动
                        getParent().requestDisallowInterceptTouchEvent(false);
                    } else if (getCurrentItem() == (getAdapter().getCount() - 1) && distanceX < 0) {
                        //最后一个，从右到左滑动
                        getParent().requestDisallowInterceptTouchEvent(false);
                    } else {
                        getParent().requestDisallowInterceptTouchEvent(true);
                    }
                } else {
                    // 垂直方向滑动
                    getParent().requestDisallowInterceptTouchEvent(false);
                }
                break;
            case MotionEvent.ACTION_UP:
                getParent().requestDisallowInterceptTouchEvent(false);
                break;
            default:
                break;
        }

        return super.dispatchTouchEvent(ev);
    }
}
